/**
 * 生成ali-oss签名，用于前端直传文件到ali-oss
 */
// 获取配置参数
const createConfig = require("uni-config-center");
const wjfConfig = createConfig({
	pluginId: 'wjf-config', // 插件id
})
const aliOssKeys = wjfConfig.config('aliOssKeys');
// import OSS from 'ali-oss'
const OSS = require('ali-oss');
/**
 * crypto 是 Node.js 中的一个内置模块，用于提供加密功能，
 * 如生成哈希值、HMAC（Hash-based Message Authentication Code）、加密/解密等操作。
 * 它包含了很多用于密码学操作的实用方法，可以用于实现数据加密、签名、哈希计算等功能。
 */
const crypto = require('crypto');
const client = new OSS({
	// yourregion填写Bucket所在地域。以华东1（杭州）为例，Region填写为oss-cn-hangzhou。
	region: aliOssKeys.region,
	// 从环境变量中获取访问凭证。运行本代码示例之前，请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
	accessKeyId: aliOssKeys.accessKeyId,
	accessKeySecret: aliOssKeys.accessKeySecret,
	bucket: aliOssKeys.bucket
});
module.exports = function(dir = '') {
	// 生成 policy
	const policyText = {
		expiration: new Date(new Date().getTime() + 3600 * 1000).toISOString(), // 1小时后过期
		conditions: [
			['content-length-range', 0, 1048576000], // 文件大小限制
			// ['starts-with', '$key', dir] // 指定上传文件的目录
		]
	};
	const policyBase64 = Buffer.from(JSON.stringify(policyText)).toString('base64');
	// 生成签名
	const signature = crypto.createHmac('sha1', client.options.accessKeySecret).update(policyBase64).digest(
		'base64');

	return {
		errCode: 0,
		errMsg: 'success',
		policy:policyBase64,
		signature,
		accessKeyId: aliOssKeys.accessKeyId,
		hostUrl:aliOssKeys.hostUrl
	}
}